<?php

namespace App\Console\Commands;


use App\Models\User;
use App\Models\UserAuth;
use Illuminate\Console\Command;


class AuthUserCommand extends Command
{
    /**
     * auth-user 认证用户处理（可以重复执行）
     *
     * 请求：
     *  php artisan command:auth-user
     *  sudo -u www php /www/wwwroot/slh/laravel.test/artisan command:auth-user
     *  sudo -u www php /www/wwwroot/shenlanhui/laravel/artisan command:auth-user
     *
     */
    /**
     * 参数与选项的区别
     *      在执行命令时，参数必须严格按定义时的顺序输入，不需输入参数名，只需输入参数的值即可。
     *      输入选项则必须带选项名，且选项名前须加 -- 前缀（选项简写字母前加 -），选项可按任意顺序输入
     */

    // 请求 以及参数
    // protected $signature = 'command:name {param1} {param2}';  // 必填参数
    // protected $signature = 'command:name {参数名?} {参数名=默认值} {参数名? : 参数说明}';  // 可选参数
    // protected $signature = 'command:name {--选项名} {--选项名=} {--选项名=默认值} {--简写字母|选项名} {--选项名 : 选项说明}';  // 选项
    protected $signature = 'command:auth-user';


    protected $description = '认证用户处理：到期提醒并发送通知';

    public function __construct()
    {
        parent::__construct();
    }

    // 认证用户处理
    public function handle()
    {
        $this->comment('获取 7天 内到期的用户');
        $userDb = new User();
        $time   = time();

        // 获取 7天 内到期的用户 并发通知消息
        // 获取 今天 已经到期的用户 并发通知消息 处理过期
        $this->comment('获取 7天 内到期的用户');
        $time7day  = $time + 86400 * 7;
        $time6day  = $time + 86400 * 6;
        $where7day = [['is_auth', '=', 1], ['verify', '=', 1], ['end_time', '<=', $time7day], ['end_time', '>=', $time6day]];
        $user7day  = $userDb->where($where7day)->get();
        // 发送通知
        $this->comment('给 7天 内到期的用户 发送通知消息！');
        $this->sendNotice($user7day);

        // 获取今天已经过期的用户
        $this->comment('获取今天已经过期的用户');
        $where = [['is_auth', '=', 1], ['verify', '=', 1], ['end_time', '<=', $time]];
        $user  = $userDb->where($where)->get();
        // 发送通知
        $this->comment('给今天已经过期的用户发送通知');
        $this->sendNotice($user);
        // 更新过期情况
        $this->comment('更新今天已经过期的用户的认证信息');
        $this->outDate($user);

        // 完成
        $this->line('完成');

        return true;
    }

    // 通知
    protected function sendNotice($users)
    {

    }

    // 处理过期的用户
    protected function outDate($lists)
    {
        if(empty($lists)){
            return true;
        }

        $userDb = new User();
        $authDb = new UserAuth();
        $uIds   = array_column($lists, 'id');

        // 更新
        $user = ['form_time' => 0, 'end_time' => 0, 'verify' => 0, 'is_auth' => 0,];
        $auth = ['form_time' => 0, 'end_time' => 0, 'verify' => 0,];
        $userDb->whereIn('id', $uIds)->update($user);
        $authDb->whereIn('uid', $uIds)->update($auth);

        // 缓存
        $userDb->deleteCacheShow(['id' => $uIds]);
        $authDb->deleteCacheShow(['uid' => $uIds]);

        return true;
    }

}
